//
//  LLTwoNumberSum.swift
//  LLTryFightingApp
//
//  Created by jinbang.li on 2024/9/29.
//

import Foundation
/**
 Leetcode 第二题
 给你两个非空的链表，表示两个非负的整数，
 它们每位数字都是按照逆序的方式存储的，并且每个结点只能存储一个数字
 
 请将两个数相加，并以相同形式返回一个表示和的新列表
 */

class LLLinkNode {
    var value:Int?
    var next:LLLinkNode?
    
    init(_ value:Int = 0,_ next:LLLinkNode? = nil) {
        self.value = value
        self.next = next
    }
}
extension LLLeetCode {
    static func LLTwoNumerSum(_ l1:LLLinkNode?,_ l2:LLLinkNode?) -> LLLinkNode?{
        let dummyNode = LLLinkNode(-1)
        var current = dummyNode
        var carry = 0
        var l1 = l1
        var l2 = l2
        while l1 != nil || l2 != nil || carry != 0 {
            let sum = (l1?.value ?? 0) + (l2?.value ?? 0) + carry
            carry = sum/10 //进位
            current.next = LLLinkNode(sum % 10)
            current = current.next!
            if l1 != nil {
                l1 = l1?.next
            }
            if l2 != nil {
                l2 = l2?.next
            }
        }
        return dummyNode.next
    }
}
